DB初学者のためのサンプルデータベース構築法
こんにちは!AWS事業本部コンサルティング部のたかくに(@takakuni_)です。
今回は、タイトルの通り検証用のサンプルデータベースを作ってみます。
対象読者
対象読者は以下の通りです。
- データベースのクラウド側だけ作って来た人(私)
- DMS(SCT)をやってみようと思うけどサンプルデータベースってどうやって作るのと思っている人(私)
- そろそろDBわからないじゃ通じなくなってきた人(私)
今回の構成
今回の構成は以下の通りです。
- EC2はデータベース接続用に作成します
- データベースは、RDS for Oracleで作成しています(ご紹介するGithubにはその他のデータベースエンジンも対応しております。)
<div class="alert">
<p>追記(2/7):自動スケーリング機能で、大幅にストレージ容量が増加してしまうため、初期ストレージ容量の設定値を変更しました。</p>
</div>
RDSの作成
設定箇所が多いため、変更した箇所のみ記載していきます。
今回は、クラウド側というよりOS側に焦点を置いているので省略しております。
設定項目 | 設定値 |
---|---|
テンプレート | 開発/テスト |
DB 識別子 | sample-database |
ストレージ割り当て(追記:2/7) | 30GB |
マスターパスワード | sampleDatabase |
Virtual Private Cloud (VPC) | 任意のVPCを選択ください |
サブネットグループ | 任意のサブネットグループを選択ください |
VPC セキュリティグループ | 任意のセキュリティグループを選択ください |
最初のデータベース名 | database |
自動バックアップを有効にします | false |
拡張モニタリングの有効化 | false |
<div class="alert">
<s>ストレージの自動スケーリングは有効にしておいてください。サンプルデータの書き込みが容量不足で終了する恐れがあります。</s></p>
<p>追記(2/7):初期ストレージ容量を30GBに設定すれば、Storage-Fullにならないため、ストレージ容量の変更を推奨します。</p>
</div>
EC2インスタンスの作成
RDS作成完了に待ち時間が生じるため、今のうちにEC2インスタンス構築を行います。
こちらも、設定値を変更した部分のみ記載しております。
設定項目 | 設定値 |
---|---|
AMI | Amazon Linux 2 AMI (HVM) - Kernel 5.10, SSD Volume Type (x86) |
インスタンスタイプ | t2.micro |
ネットワーク | 任意のVPCを選択ください |
サブネットグループ | 任意のサブネットグループを選択ください |
自動割り当てパブリック IP | true(パブリックサブネットに配置しているため) |
OS構築
ログイン
% ssh -i XXXXX.pem ec2-user@54.199.214.51
Warning: Permanently added '54.199.214.51' (ECDSA) to the list of known hosts.
__| __|_ )
_| ( / Amazon Linux 2 AMI
___|___|___|
https://aws.amazon.com/amazon-linux-2/
[ec2-user@ip-192-168-1-62 ~]$
git
のインストール
サンプルデータは、以下のGithubからダウンロードを行います。
そのため、gitのインストールを行います。
aws-samples/aws-database-migration-samples
[ec2-user@ip-192-168-1-62 ~]$ sudo yum install git
Oracle Database Clientのインストール
Oracle DBへ接続するためにOracle Instant Client Downloads for Linux x86-64 (64-bit)からOracle Database Clientのインストールを行います。
Basic PackageとSQL*Plus Packageのインストールを行います。
まずは、リンクのアドレスをコピーします。
Basic Package
SQL*Plus Package
コピーができたら、wget
コマンドでダウンロードを行います。
[ec2-user@ip-192-168-1-62 ~]$ wget https://download.oracle.com/otn_software/linux/instantclient/215000/oracle-instantclient-basic-21.5.0.0.0-1.el8.x86_64.rpm
[ec2-user@ip-192-168-1-62 ~]$ wget https://download.oracle.com/otn_software/linux/instantclient/215000/oracle-instantclient-sqlplus-21.5.0.0.0-1.el8.x86_64.rpm
[ec2-user@ip-192-168-1-62 ~]$ ls
oracle-instantclient-basic-21.5.0.0.0-1.el8.x86_64.rpm oracle-instantclient-sqlplus-21.5.0.0.0-1.el8.x86_64.rpm
保存完了したら、インストールを行います。
[ec2-user@ip-192-168-1-62 ~]$ sudo rpm -ivh oracle-instantclient-basic-21.5.0.0.0-1.el8.x86_64.rpm
[ec2-user@ip-192-168-1-62 ~]$ sudo rpm -ivh oracle-instantclient-sqlplus-21.5.0.0.0-1.el8.x86_64.rpm
サンプルデータスクリプトのダウンロード, 移動
aws-samples/aws-database-migration-samplesからサンプルデータベースを作成するスクリプトをダウンロードしてきます。
[ec2-user@ip-192-168-1-62 ~]$ mkdir sample-db
[ec2-user@ip-192-168-1-62 ~]$ cd sample-db/
[ec2-user@ip-192-168-1-62 sample-db]$ git clone https://github.com/aws-samples/aws-database-migration-samples.git
[ec2-user@ip-192-168-1-62 sample-db]$ ls
aws-database-migration-samples
# インストールスクリプトへの移動 DBエンジン毎にaws-database-migration-samples/から分岐します。
[ec2-user@ip-192-168-1-62 sample-db]$ cd /home/ec2-user/sample-db/aws-database-migration-samples/oracle/sampledb/v1
[ec2-user@ip-192-168-1-62 v1]$ ls
README.md data install-onprem.sql install-rds.out install-rds.sql remove-sampledb.sql schema user
DBへの接続
Oracleデータベースへの接続は以下の形式で接続を行います。
sqlplus 'dbuser@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=endpoint)(PORT=portnum))(CONNECT_DATA=(SID=DB_NAME)))'
- dbuser で、前の手順でコピーしたマスターユーザー名を入力します。
- HOST=endpointで、RDSのエンドポイントを入力します。
- PORT=portnumで、RDSの接続ポート番号を入力します。
- SID=DB_NAMEで最初のデータベース名を入力します。
sqlplus 'admin@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=sample-database.XXXXXXXXXXXX.ap-northeast-1.rds.amazonaws.com
)(PORT=1521))(CONNECT_DATA=(SID=database)))'
SQL*Plus: Release 21.0.0.0.0 - Production on Thu Feb 3 23:24:11 2022
Version 21.5.0.0.0
Copyright (c) 1982, 2021, Oracle. All rights reserved.
Enter password: sampleDatabase # パスワードを入力後、「Enter」を入力する、今回の場合は「sampleDatabase」
Last Successful login time: Thu Feb 03 2022 23:21:45 +00:00
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.13.0.0.0
SQL>
サンプルデータの流し込み
git clone
したスクリプト内の.sql
ファイルを実行します。
今回は、RDSでデータベースを立ち上げているので、install-rds.sql
を実行します。
SQL> @/home/ec2-user/sample-db/aws-database-migration-samples/oracle/sampledb/v1/install-rds.sql
<div class="alert">
<p>最大45分かかるようなので気長に待ちましょう!</p>
</div>
サンプルデータの確認
SQL> select owner,table_name from dba_tables;
# ===== 省略 ======
OWNER
--------------------------------------------------------------------------------
TABLE_NAME
--------------------------------------------------------------------------------
SYS
UTL_RECOMP_SORTED
SYS
UTL_RECOMP_COMPILED
SYS
WRI$_REPT_COMPONENTS
1830 rows selected.
とりあえず、いっぱい出てきました。
SQLコマンドまだ理解できていないですが、それなりにサンプルデータベースが作れていることがわかりました。
ストレージ容量ケチって自動スケーリングをオフにした場合
SQLコマンド流し込みがやけに早いなぁと思っていたら、RDSがStorage-full(容量不足)で悲鳴をあげていました。
自動スケーリングってすごいなぁと感じれた瞬間でした。
ちなみに、初期ストレージ20GBの状態で、自動スケーリングを有効化を行い、流し終えた時の容量は153 GiB
でした。
エンジン毎に異なると思うのでご注意ください。
追記:ストレージ容量をケチって自動スケーリングをオンにした場合
ここから追記になります。
RDSの自動スケーリングは以下の基準でストレージの増加が行われます。
追加のストレージは、次のうちいずれか大きい方の増分です。
- 5 GiB
- 現在割り当てられているストレージの 10%
- 直近 1 時間の FreeStorageSpace メトリクスの変動に基づいて予測される 7 時間のストレージの増分。メトリクスの詳細については、Amazon CloudWatch によるモニタリングを参照してください。
20GBだと今回のハンズオンの場合、自動スケーリングで7時間分の予測したストレージ増加分(140GB近く)が増えてしまいます。
そのため、ストレージ容量を30GBに変更することで、急な自動スケーリングを回避します。
まとめ
今回は、RDS for Oracleを使用してサンプルデータベースを作成してみました。
私のようにクラウド側だけ触ってきた人が「サンプルデータベース作ってよ!」と急に来た時に役立つ記事かなど個人的には思います。
この記事がどなたかの参考になれば幸いです。
以上、AWS事業本部コンサルティング部のたかくに(@takakuni_)でした!